#include "FreeRTOS.h"
#include "task.h"
#include <stdio.h>
#include "board.h"

#include "bflb_core.h"
#include "bflb_gpio.h"
#include "bflb_mtimer.h"
#include "bflb_spi.h"

#define DBG_TAG "LCD-Demo"
#define CONFIG_LOG_LEVEL 3

#include "lcd.h"
#include "lvgl.h"
#include "log.h"
#include "ui.h"
#include "lcd_bl.h"

void lvgl_task(void)
{
    while (1)
    {
        lv_task_handler();
        vTaskDelay(1);
    }
}

void lv_print_cb(void* msg)
{
    printf("[lvgl] %s\n", msg);
}
ui_t ui;
extern struct bflb_device_s* gpio;
void test_gpio(void)
{
    bflb_gpio_init(gpio, GPIO_PIN_2, GPIO_OUTPUT | GPIO_PULLUP);
    // bflb_gpio_init(gpio, GPIO_PIN_2, GPIO_INPUT | GPIO_PULLUP);
    while (1) {

        bflb_gpio_set(gpio, GPIO_PIN_2);
        printf("out down\n");
        vTaskDelay(1000 / portTICK_RATE_MS);

        // bflb_gpio_set(gpio, GPIO_PIN_2);
        bflb_gpio_reset(gpio, GPIO_PIN_2);
        printf("in pull up\n");
        vTaskDelay(1000 / portTICK_RATE_MS);
    }
}
void test_gpio1()
{
    while (1)
    {

        bflb_gpio_reset(gpio, GPIO_PIN_2);
        vTaskDelay(0.01);
        bflb_gpio_set(gpio, GPIO_PIN_2);
        vTaskDelay(0.99);
    }
}
int main()
{
    board_init();
    printf("hello\n");
    gpio = bflb_device_get_by_name("gpio");
    lv_log_register_print_cb(lv_print_cb);
    lv_init();
    lv_port_disp_init();
    lv_port_indev_init();

    //初始化UI
    ui_init(&ui);
    //初始化LCD
    lcd_bl_init();
    //注册回调事件
    ui_value_register_func(&ui, lcd_bl_update_ligth);

    xTaskCreate(lvgl_task, "lvgl_task", 512, NULL, 5, NULL);

    // xTaskCreate(test_gpio, "gpio_test", 512, NULL, 6, NULL);

    // xTaskCreate(test_gpio1, "gpio_test1", 512, NULL, 6, NULL);


    vTaskStartScheduler();

    while (1) {

    }
    return 0;
}